<?php

/**
 * 位置信息搜索回复
 * 当微信用户发送地理位置时将以图文形式返回新增的最近的数据
 * @category SearchLoc
 * @package  Plus
 * @author   ayhome <ayhome@gmail.com>
 * @version  $Id: SearchLocAction.php 2013-12-19 16:30:37 ayhome@gmail.com $
 */
class SearchlocAction extends BasePlusAction {

    ////////////////微信插件的基础信息//////////////////

    /////唯一编码标识 以此为检查更新 
    public function code()
    {
      return "searchloc";
    }

    ///插件的描述
    public function desc()
    {
      return "当微信用户发送地理位置时将以图文形式返回新增的最近的数据";
    }

    ///插件版本号
    public function ver()
    {
      return "20131220";
    }

    ///创建时间 默认
    public function ctime()
    {
      return '2013-12-19';
    }

    ///插件名称
    public function title()
    {
      return "位置信息搜索回复";
  	}
    ////////////////微信插件的基础信息//////////////////

  	/**
    * 会将微信的所有参数传递过来,全局变量为 $this->wxpost; 
    * 这里做了处理之后 返回给前端处理再返回给用户;
    **/
  	public function getMsg($value='')
  	{
      ///判断微信的消息格式 这里只判断是否为地理位置消息
  		$MsgType = $this->wxpost['MsgType'];
  		if ($MsgType != "location") return;

      //获取经纬度
      $myLat = $this->wxpost['Location_X'];//接收到的当前位置的纬度  
      // $myLat = '30.271375';//接收到的当前位置的纬度  
      $myLng = $this->wxpost['Location_Y'];//接收到的当前位置的经度
      // $myLng = '120.174536';//接收到的当前位置的经度
      if (!$myLat || !$myLng) return;

      ///////经纬度搜搜
      $range = 180 / pi() * 2 / 6372.797;     //里面的 2 就代表搜索 2km 之内，单位km  
      $lngR = $range / cos($myLat * pi() / 180);  
      $maxLat = $myLat + $range;//最大纬度  
      $minLat = $myLat - $range;//最小纬度  
      $maxLng = $myLng + $lngR;//最大经度  
      $minLng = $myLng - $lngR;//最小经度 
      $PlusLoc = D('PlusLoc');
      unset($map);
      $map['mid'] = $this->wxpost['mid'];
      $map['lat'] = array(array('gt',$minLat),array('lt',$maxLat)) ;
      $map['lng'] = array(array('gt',$minLng),array('lt',$maxLng)) ;
      $vlist = $PlusLoc->where($map)->limit(5)->select();
      F('sql',$PlusLoc->getlastSql());

      // /如果没有数据 则文本模式返回消息
      if (!$vlist) {
        $this->textMsg();
        return $this->retMsg;
      }


      $plusid = $this->myPlusFull['id'];
  		$volist = array();
      foreach ($vlist as $k) {
        $k['url'] = U("Mobile/Plus/index?id=$k[id]&plusid=$plusid",'','',false,true);
        $volist[] = $k;
      }
  		$this->retMsg['msgType'] = 'news';
  		$this->retMsg['volist'] = $volist;
  		return $this->retMsg;
  	}
    ///返回文本消息
    public function textMsg($value='')
    {
      //获取经纬度
      $myLat = $this->wxpost['Location_X'];//接收到的当前位置的纬度  
      $myLng = $this->wxpost['Location_Y'];//接收到的当前位置的经度
      $msg = "你搜的 lat:$myLat lng:$myLng 暂时没有任何消息";
      $this->retMsg['msgType'] = 'text';
      $this->retMsg['msg'] = $msg;
    }


  	/////  安装插件时候的动作.例如 创建表
  	public function install()
  	{
  		$Model = new Model();
		  $Model->execute("CREATE TABLE IF NOT EXISTS `".C('DB_PREFIX')."plus_loc` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `mid` int(11) NOT NULL,  `title` varchar(128) NOT NULL,  `picurl` varchar(255) NOT NULL,  `lat` varchar(32) NOT NULL,  `lng` varchar(32) NOT NULL,  `desc` text NOT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ");
		  $Model->execute( $sql);
  	}

  	/////  插件卸载时候的动作.例如 删除表
  	public function uninstall()
  	{
      // if ($this->mid) {
  		  // $Model = new Model();
  		  // $sql = "DROP TABLE IF EXISTS `".C('DB_PREFIX')."plus_loc`";
		    // $Model->execute($sql);
      // }
  	}


  	///列表
  	public function index()
  	{
  		  $PlusLoc = M('PlusLoc');
      	$map['mid'] = $this->mid;
      	$volist  = $PlusLoc->where($map)->select();
      	$this->assign('volist',$volist);
      	cookie( '_currentUrl_', __SELF__ );
  	}

  	///插入新增动作
  	public function insert()
  	{
  		$_POST['mid'] = $this->mid;
        $PlusLoc = D("PlusLoc");
        if ( false === $PlusLoc->create() ) {
        	$this->error( $PlusLoc->getError() );
        }
        //保存当前数据对象
        $list = $PlusLoc->add();
        if ( $list !== false ) { //保存成功
        	$this->success( '新增成功!', cookie( '_currentUrl_' ) );
        } else {
          $this->error( '新增失败!' );
        }
  	}
  	//编辑邀请函
  	public function edit()
  	{
  		$id = I('id');
  		$map['id'] = $id;
  		$map['mid'] = $this->mid;
      $PlusLoc = D("PlusLoc");
  		$vo = $PlusLoc->where( $map )->find();
  		if ( !$vo ) {
  			$this->error( "参数错误.非法参数." );
  			exit();
  		}
  		$this->assign( 'vo', $vo );
  	}

  	///更新邀请函
  	public function update()
  	{
        $PlusLoc = D("PlusLoc");
	    if ( false === $PlusLoc->create() ) {
	      $this->error( $PlusLoc->getError() );
	    }
	    $id = I('id');
	    // 更新数据
	    $map['mid'] = $this->mid;
	    $map['id'] = $id;
	    $list = $PlusLoc->where( $map )->save();
	    if ( false !== $list ) {
	      //成功提示
	      $this->success( '编辑成功!', cookie( '_currentUrl_' ) );
	    } else {
	      //错误提示
	      $this->error( '编辑失败!' );
	    }
  	}
  	///删除数据
  	public function delete()
  	{
      $PlusLoc = D("PlusLoc");
  		$id = I('id');
  		$map['id'] = $id;
  		$map['mid'] = $this->mid;
  		$PlusLoc->where($map)->delete();
  		$this->success( '删除成功!');
  		exit();
  	}


  	/////
  	//移动端显示
  	public function indexMobile()
  	{
      $PlusLoc = D("PlusLoc");
  		$id = I('id');
  		$vo = $PlusLoc->where()->find($id);
  		$this->assign( 'vo', $vo );
  	}


}